Op deze pagina vind je een demonstratie van een statistische techniek aan de hand van een voorbeeld.
Meer informatie over hoe je deze pagina kan gebruiken vind je in deze handleiding.
De analyse gebeurt met behulp van R en RStudio. Een inleiding tot deze software vind je hier.
Het is een goed idee om een dataset te verkennen, vooraleer je er allerlei statistische technieken op loslaat. R biedt een heel uitgebreid gamma aan functies om dat te doen.
De output van die functies dient vaak niet om te publiceren. Het is vooral de bedoeling om zelf meer inzicht te krijgen in de variabelen in je dataset en de samenhang tussen die variabelen.
Op deze pagina vind je hoe je de samenhang tussen 2 continue variabelen kan beschrijven en visueel voorstellen.
De dataset Caschool bevat gegevens van 13 variabelen geobserveerd bij 420 scholen uit Californië.
Deze dataset kan je inladen met onderstaande code. De data kan je best meteen in een object Caschool
onderbrengen zodat je die later makkelijk opnieuw kan oproepen.
Caschool <- read.csv("https://statlas.ugent.be/datasets/Caschool2.csv")
Het object Caschool
is een dataframe dat alle data voor alle variabelen bevat.
class(Caschool) # Denk eraan dat R hoofdlettergevoelig is!
[1] "data.frame"
Met str()
krijg je een opsomming van alle variabelen in de dataset. Je vindt er ook telkens bij om welk datatype het gaat. Afhankelijk van het datatype zal je sommige functies wel of juist niet kunnen gebruiken om je data te verkennen. Het heeft bijvoorbeeld geen zin om een gemiddelde te berekenen van een variabele van type chr
.
str(Caschool)
'data.frame': 420 obs. of 13 variables:
$ district : chr "Sunol Glen Unified" "Manzanita Elementary" "Thermalito Union Elementary" "Golden Feather Union Elementary" ...
$ grspan : chr "KK-08" "KK-08" "KK-08" "KK-08" ...
$ enrltot : int 195 240 1550 243 1335 137 195 888 379 2247 ...
$ teachers : num 10.9 11.1 82.9 14 71.5 ...
$ computer : int 67 101 169 85 171 25 28 66 35 0 ...
$ testscr : num 691 661 644 648 641 ...
$ compstu : num 0.344 0.421 0.109 0.35 0.128 ...
$ expnstu : num 6385 5099 5502 7102 5236 ...
$ str : num 17.9 21.5 18.7 17.4 18.7 ...
$ logavginc: num 1.356 0.992 0.953 0.953 0.958 ...
$ elpct : num 0 4.58 30 0 13.86 ...
$ readscr : num 692 660 636 652 642 ...
$ mathscr : num 690 662 651 644 640 ...
In de output van str()
zie je inderdaad dat er 13 variabelen zijn met telkens 420 observaties (hier dus: scholen).
Variabelen die je interesseren kan je hier eventueel al in een apart object opslaan.
logavginc <- Caschool$logavginc
expnstu <- Caschool$expnstu
Met cor()
kan je Pearsons correlatiecoëfficiënt berekenen. Dit is een maat voor de lineaire samenhang van twee continue variabelen.
cor(logavginc, expnstu)
[1] 0.2511338
Met dezelfde functie kan je ook andere maten van samenhang berekenen. Gebruik daarvoor het argument method="kendall"
of method="spearman"
.
Meer uitleg over associatiematen vind je hier vanaf 4.4.
Een belangrijk onderdeel van het verkennen van data bestaat erin om een visuele voorstelling te maken van de data. Hier tonen we hoe je dat kan doen in het R-basispakket1.
pairs()
De functie pairs()
laat toe om veel variabelen ineens paarsgewijs (vandaar uiteraard de naam) te visualiseren. Hier kiezen we voor de 3e tot en met de 7e kolom/variabele van de dataset.
pairs(Caschool[,3:7], lower.panel=NULL)
De output van pairs()
kan handig zijn voor een eerste visuele indruk, maar als je wat meer detail wil kan je beter afzonderlijke scatterplots maken.
Twee continue variabelen visualiseren kan eenvoudig met plot()
. Je ziet hieronder meteen ook hoe je de titel van de plot en de titels van de assen kan invullen zoals je zelf wil.
plot(x=logavginc, y=expnstu,
main="Titel van de figuur",
xlab="Naam van de x-as",
ylab="Naam van de y-as")
Aan de scatterplot kan je een best passende rechte toevoegen met abline
.2 De helling hiervan is gebaseerd op de correlatiecoëfficiënt van Pearson.
plot(x=logavginc, y=expnstu,
main="Titel van de figuur",
xlab="Naam van de x-as",
ylab="Naam van de y-as")
abline(lm(expnstu ~ logavginc), col="green") # Let op de volgorde van de variabelen!!!
De interpretatie van Pearsons correlatiecoëfficiënt is enkel zinvol als er inderdaad een lineair verband is tussen de variabelen. Dat kan je visueel nagaan met een scatterplot. Je kan meteen een best passende rechte tekenen (groen), maar nu voeg je ook een vloeiende lijn toe (rood).
plot(logavginc, expnstu)
abline(lm(expnstu ~ logavginc), col="green")
smooth <- loess(expnstu ~ logavginc)
i <- order(logavginc)
lines(logavginc[i], predict(smooth)[i], col="red")
De vloeiende rode lijn, ook gekend als een ‘loesscurve’, toont een iets ander patroon. Aan de uiterste linker- en rechterkant ligt de rode curve een eindje boven de groene rechte. Anderzijds zijn daar maar heel weinig datapunten, dus die ‘buiging’ betekent misschien niet veel.
Het kan interessant zijn om de datapunten in je scatterplot in te kleuren volgens de waarde van een andere, categorische variabele, bv. grspan
.
grspan <- factor(Caschool$grspan) # grspan moet van type 'factor' zijn, niet type 'chr'
Eerst moet je achterhalen hoeveel kleuren je nodig hebt. Dat stemt overeen met het aantal niveau’s van de categorische variabele. De functie nlevels()
zegt je hoeveel het er zijn.
nlevels(grspan)
[1] 2
De code hieronder laat je toe om de datapunten in te kleuren.
plot(x=logavginc, y=expnstu,
main="Uitgaven per student t.o.v. inkomen",
xlab="Log gemiddeld inkomen in het district",
ylab="Uitgaven per student",
col=c("red", "blue")[grspan] # Let op: grspan moet van type factor zijn
)
Omdat je extra informatie toevoegt aan de plot voeg je best ook een legende toe.
plot(x=logavginc, y=expnstu,
main="Uitgaven per student t.o.v. inkomen",
xlab="Log gemiddeld inkomen in het district",
ylab="Uitgaven per student",
col=c("red", "blue")[grspan] # Let op: grspan moet van type factor zijn
)
legend("bottomright", inset=0.01, legend=levels(grspan), fill=c("red", "blue"))
Er bestaan ook R-packages die speciaal ontworpen zijn voor datavisualisatie. Het meest gebruikte heet ‘ggplot2’.
De scatterplot blijft beschikbaar voor toevoegingen -zoals een legende, lijnen, vlakken of tekst- nadat de functie plot()
is uitgevoerd. Dit kan bijvoorbeeld met de functies abline()
, polygon()
of text()
. De plot blijft beschikbaar zolang je geen andere code uitvoert die niets met de plot zelf te maken heeft.